A Virtual Network Computing (VNC) system is a client/server software package that allows remote network access to graphical desktops. During a typical VNC session, an operator performs a remote management session and uses the remote desktop like his local desktop. The operator performs various graphical operations like reading a document, editing text, using a graphical user interface (GUI) application, and the like. The quality of service depends on the responsiveness of these operations.
A VNC system includes a client, a server, and a communication protocol. The VNC client, also referred to as a VNC Viewer, is interested in the graphical desktop of a remote machine, and periodically requests updates of the screen (Frame Buffer) of the server. The VNC client sends a request packet, referred to as a FrameBufferUpdateRequest (FBUR), to the server to request the update of the server.
The VNC server is a process running on the remote machine. The VNC server sends the updates of its screen as a response to receiving the FBUR from the VNC client. This response by the server sent to the client to update the screen changes is referred to as a FrameBufferUpdate (FBU). The FBU includes information regarding the changed portion of a screen. The changed portion of the screen is divided into various small rectangles, and the rectangles are encoded according to various encodings to optimize the amount of data transferred. The number of rectangles depends on type of encoding used. For example, hextile encoding splits the FBU into 16×16 rectangles, and tight encoding has one rectangle for background color and one rectangle has foreground, etc.). The rectangle represents the area of the screen that is effected, but the information in the rectangle depends on the encoding used to represent that rectangle.
The VNC protocol (e.g. remote framebuffer (RFB)) is a simple protocol for remote access to graphical user interfaces (GUIs). The VNC protocol is based on one graphic primitive from the server to the client (“Put a rectangle of pixel data at the specified X,Y position”) and event messages from the client to the server.
In known VNC systems, the VNC client receives a FBU from the VNC server, and reads the total number of rectangles represented in the FBU. For each rectangle represented in the FBU, the VNC client reads the information for one of the rectangles, decodes the information, paints the decoded information for the rectangle on the screen, and then continues to read, decode and paint each one of the remaining rectangles in the FBU until all of the rectangles in the FBU have been processed. When all of the rectangles in the FBU have been processed, the VNC client sends a new FBUR to the VNC server.